從上一章節,我們學會了基本的登入與登出桌面環境,以及如何將終端機從桌面環境進行打開,還有基本的幾個指令的介紹與使用,接下來,繼續介紹作業系統上的基礎。本章節,要來介紹檔案系統,來看看Linux之檔案系統的結構,並期許看玩了這個章節,能夠知道與描述Linux檔案系統的結構以及檔案與目錄的基本操作。
從上面的圖來看,就是Linux檔案系統的架構,最上面都會從根(/)檔案系統,也是就是root開始,往下以階層的方式擴展下去,裡面有幾個重要的檔案系統目錄整理在下面的清單:
其中,/dev、/run、/proc與/sys都是特別的目錄,不要將檔案放在這些目錄底下,原因是這些目錄會放置Kernel至存檔案的地方而且這四個目錄會對應到一個記憶體之空間。
指定一個檔案可以透過兩種方式來完成,一種叫做絕對路徑,一種叫做相對路徑。絕對路徑指的是:從根目錄開始,直接指定到檔案的路徑位址,像是使用者存的密碼檔案之絕對路徑就會以:/etc/passwd來表示。路徑之間的隔開會用斜線(slash),相對路徑就是不是從根目錄開始指定一個路徑,可能是從某個當前目錄開始指定一個檔案路徑,什麼意思呢?可以看看下面這個例子:
[rockylinux@workstation ~]$ ls /etc/passwd
/etc/passwd
[rockylinux@workstation ~]$ ls ../
rockylinux
[rockylinux@workstation ~]$
ls
指令是一個可以查看目錄或是檔案的指令,第一個指令,毫無疑問的是一個絕對路徑的例子,那第二個指令是什麼意思呢?指的是從當前目錄去察看上一層目錄下的檔案與目錄,因為當前目錄是使用者的家目錄,上一層就是/home目錄,因此就會顯示出所有使用者的目錄了,所以從這邊可以知道,./
指的是當前目錄,而../
指的是上一層目錄。
這邊介紹幾個觀看目錄會用到的指令。首先,pwd
這個指令會顯示出當前目錄的完整名稱,指令的執行方式與輸出如下:
[rockylinux@workstation ~]$ pwd
/home/rockylinux
[rockylinux@workstation ~]$
ls
指令是列出指定目錄下之檔案與目錄,執行指令方式與輸出的結果如下:
[rockylinux@workstation ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
[rockylinux@workstation ~]$
cd
指令是可以切換到某個目錄底下,相關的執行指令方式與輸出的結果如下:
[rockylinux@workstation ~]$ cd Music/
[rockylinux@workstation Music]$ cd /home/rockylinux/Videos
[rockylinux@workstation Videos]$
從上面輸出的指令結果可以看到,cd
指令可以接的目錄可以是絕對路徑,也可以是相對路徑,而同樣的,ls
後面接要查看的目錄位置也可以允許相對與絕對路徑,若cd
指令沒有接任何的參數,則執行之後會切換到當前使用者的家目錄。
若要輸出更多每個檔案與目錄更多的資訊,像是每個檔案存取權限的資訊、擁有者、修改時間日期或是隱藏檔案,可以使用-a
與-l
這兩個選項來做到,可以把選項合在一起變成-al
,就會變成下面這樣:
[rockylinux@workstation ~]$ ls -al
total 32
drwx------. 15 rockylinux rockylinux 4096 Sep 19 20:38 .
drwxr-xr-x. 3 root root 24 Sep 18 00:05 ..
-rw-------. 1 rockylinux rockylinux 453 Sep 19 23:13 .bash_history
-rw-r--r--. 1 rockylinux rockylinux 18 Jun 17 07:42 .bash_logout
-rw-r--r--. 1 rockylinux rockylinux 141 Jun 17 07:42 .bash_profile
-rw-r--r--. 1 rockylinux rockylinux 376 Jun 17 07:42 .bashrc
drwxr-xr-x. 10 rockylinux rockylinux 238 Sep 18 00:05 .cache
drwx------. 11 rockylinux rockylinux 215 Sep 18 00:05 .config
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Desktop
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Documents
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Downloads
-rw-------. 1 rockylinux rockylinux 16 Sep 18 00:05 .esd_auth
-rw-------. 1 rockylinux rockylinux 1550 Sep 19 20:31 .ICEauthority
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 .local
drwxr-xr-x. 4 rockylinux rockylinux 39 Sep 17 23:33 .mozilla
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Music
drwxr-xr-x. 2 rockylinux rockylinux 4096 Sep 19 20:58 Pictures
drwxrw----. 3 rockylinux rockylinux 19 Sep 18 00:05 .pki
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Public
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Templates
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Videos
上述的檔案資訊說明如下:
drwx------.
為例,第一個字元d指的是目錄的意思,而如果是-
則指的是一般檔案,若是l
的話則是soft-link,而b
和c
則是設備檔,而s
是Unix domain socket檔,而p
指的是pipeline檔,後面的有r
、w
與x
則會在後面提到,這邊只需要了解代表的是使用者權限的意思,最後一個字元是.
的話,則是一般的檔案權限,若是+
的話,指的是ACL檔案權限,至於ACL檔案權限介紹也會在後面章節中做詳細的介紹。.bash_history
這樣表示,則是一個隱藏檔案。若是只要印出指定路徑所有的目錄即可的話,則可以使用ls -ald
做到,意思就是加上一個-d
參數做到,相關的執行指令執行後的結果如下:
[rockylinux@workstation ~]$ ls -ald
drwx------. 15 rockylinux rockylinux 4096 Sep 19 20:38 .
[rockylinux@workstation ~]$
若要印出某個指定路徑底下,所有子目錄底下的路徑的話,則可以使用-R
來做到,相關執行後的結果如下:
[rockylinux@workstation ~]$ ls -alR /home/
/home/:
total 4
drwxr-xr-x. 3 root root 24 Sep 18 00:05 .
dr-xr-xr-x. 17 root root 224 Sep 17 23:34 ..
drwx------. 15 rockylinux rockylinux 4096 Sep 19 20:38 rockylinux
/home/rockylinux:
total 32
drwx------. 15 rockylinux rockylinux 4096 Sep 19 20:38 .
drwxr-xr-x. 3 root root 24 Sep 18 00:05 ..
-rw-------. 1 rockylinux rockylinux 453 Sep 19 23:13 .bash_history
-rw-r--r--. 1 rockylinux rockylinux 18 Jun 17 07:42 .bash_logout
-rw-r--r--. 1 rockylinux rockylinux 141 Jun 17 07:42 .bash_profile
-rw-r--r--. 1 rockylinux rockylinux 376 Jun 17 07:42 .bashrc
drwxr-xr-x. 10 rockylinux rockylinux 238 Sep 18 00:05 .cache
drwx------. 11 rockylinux rockylinux 215 Sep 18 00:05 .config
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Desktop
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Documents
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Downloads
-rw-------. 1 rockylinux rockylinux 16 Sep 18 00:05 .esd_auth
-rw-------. 1 rockylinux rockylinux 1550 Sep 19 20:31 .ICEauthority
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 .local
drwxr-xr-x. 4 rockylinux rockylinux 39 Sep 17 23:33 .mozilla
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Music
drwxr-xr-x. 2 rockylinux rockylinux 4096 Sep 19 20:58 Pictures
drwxrw----. 3 rockylinux rockylinux 19 Sep 18 00:05 .pki
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Public
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Templates
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Videos
/home/rockylinux/.cache:
total 20
drwxr-xr-x. 10 rockylinux rockylinux 238 Sep 18 00:05 .
drwx------. 15 rockylinux rockylinux 4096 Sep 19 20:38 ..
-rw-r--r--. 1 rockylinux rockylinux 12288 Sep 19 20:31 event-sound-cache.tdb.efa711973c694923969a64fd32220e6d.x86_64-redhat-linux-gnu
drwx------. 8 rockylinux rockylinux 94 Sep 18 00:05 evolution
drwxr-xr-x. 3 rockylinux rockylinux 26 Sep 18 00:05 flatpak
drwxr-xr-x. 7 rockylinux rockylinux 114 Sep 18 02:26 gnome-software
drwxrwxr-x. 2 rockylinux rockylinux 33 Sep 18 00:05 gstreamer-1.0
drwx------. 2 rockylinux rockylinux 6 Sep 18 00:05 libgweather
drwxr-xr-x. 51 rockylinux rockylinux 4096 Sep 19 20:54 mesa_shader_cache
drwxr-xr-x. 2 rockylinux rockylinux 229 Sep 19 20:31 tracker
drwx------. 4 rockylinux rockylinux 45 Sep 18 00:05 yelp
/home/rockylinux/.cache/evolution:
total 0
drwx------. 8 rockylinux rockylinux 94 Sep 18 00:05 .
drwxr-xr-x. 10 rockylinux rockylinux 238 Sep 18 00:05 ..
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 addressbook
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 calendar
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 mail
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 memos
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 sources
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 tasks
/home/rockylinux/.cache/evolution/addressbook:
total 0
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 .
drwx------. 8 rockylinux rockylinux 94 Sep 18 00:05 ..
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 trash
/home/rockylinux/.cache/evolution/addressbook/trash:
total 0
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 .
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 ..
/home/rockylinux/.cache/evolution/calendar:
total 0
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 .
drwx------. 8 rockylinux rockylinux 94 Sep 18 00:05 ..
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 trash
/home/rockylinux/.cache/evolution/calendar/trash:
total 0
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 .
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 ..
/home/rockylinux/.cache/evolution/mail:
total 0
drwxr-xr-x. 3 rockylinux rockylinux 19 Sep 18 00:05 .
drwx------. 8 rockylinux rockylinux 94 Sep 18 00:05 ..
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 trash
......
若要新建立一個檔案,則可以使用touch
指令來做到,例如:假設要在當前的使用者目錄建立一個檔案的話,則可以使用:touch file1
來做到,相關的輸出指令結果如下:
[rockylinux@workstation ~]$ touch file1
[rockylinux@workstation ~]$ ls
Desktop Documents Downloads file1 Music Pictures Public Templates Videos
這邊列出幾個常見的檔案與目錄的操作,相關的操作如下列表:
mkdir directory
:這個mkdir
指令指的是新增一個目錄,後面可以接的是要新增目錄的名稱。mkdir -p directory1/directory2
,多了-p
參數則會在建立目錄的時候,若directory1不存在的話,則會先建立,接著再建立directory2
。cp file new_file
:這個cp
指令指的是複製一個檔案並為複製的檔案取一個新的檔案名稱。cp -r directory new_dirctory
,這個cp
指令搭配了-r
參數,則是將一個目錄包含底下所有的目錄與檔案整個複製到一個取名的目的目錄名稱。mv file new_file
,這個mv
指令就是將檔案重新命名成另一個檔案名稱,而用在目錄則是將目錄重新命名。rm file
,rm
這個指令就是將指定的檔案給刪除。rm -i file
,加上-i
指令則是互動式方式詢問是否要刪除這個檔案,給使用者作最後一次地確認。rm -r directory
,這個指令就是將某個目錄給刪除,不管目錄是不是空的,都可以將指定的目錄給刪除掉rm -rf directory
,這個指令也是將指定的目錄刪除,但是比上面指令多了一個-f
參數,這個參數指的是,因為有時候檔案或是目錄可能不存在,而-f
則是忽略那些檔案或是目錄,一律就是強制的刪除而且不會有任何的互動的詢問。rmdir directory
,這個指令是將空的目錄刪除,若目錄底下不是空的,則會無法刪除。檔案捷徑分成:soft links與hard links,所謂的hard links,中文會叫做硬連結,指的是有兩個檔案會指向同一個inode,inode會儲存檔案物件與屬性,hard links並不會暫額外的空間,但是無法跨越裝置與分割的磁碟空間,通常是用在磁碟空間有限的地方,像是嵌入系統的環境。使用-i
參數在執行ls
指令的時候,則會可以印出指定的檔案之inode編號是多少,相關的指令之輸出結果如下:
[rockylinux@workstation ~]$ ls -i file1
1495446 file1
soft links又是什麼呢?中文會叫做軟連結,則沒有hard links之限制,能夠跨裝置或是磁碟分割區路徑來做到連結,但是建立連結的同時,則會佔額外空間給建立連結的檔案,那要怎麼建立hard links與soft links呢?可以使用ln
來做到,相關的執行方法如下:
[rockylinux@workstation ~]$ ln file1 file2_hard
[rockylinux@workstation ~]$ ls -i file1 file2_hard
1495446 file1 1495446 file2_hard
若只用ln
沒有加其他參數,只有加上檔案與被建立連結檔案名稱的話,則會建立成hard links,而使用ls -i
指令則可以知道,這兩個檔案之inode編號是一樣的,若要建立的是soft links,則可以使用下列的方法:
[rockylinux@workstation ~]$ ln -s file1 file2_soft
[rockylinux@workstation ~]$ ls -i file1 file2_soft
1495446 file1 2242910 file2_soft
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$
從上面輸出的結果可以得知,建立的soft link之檔案是單獨的一個檔案,因為使用的inode編號是不同的,那刪除呢?我們試著將檔案刪除之後,接著再執行上述查看檔案相關的連結之間的指令,則會看到下列的結果:
[rockylinux@workstation ~]$ rm file1
[rockylinux@workstation ~]$ ls -al file2_hard
-rw-rw-r--. 1 rockylinux rockylinux 0 Sep 21 01:17 file2_hard
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ ls -al file2_soft
lrwxrwxrwx. 1 rockylinux rockylinux 5 Sep 21 01:45 file2_soft -> file1
最後一個若在畫面上會顯示紅色的警告,表示soft link之連結已經失效,但是hard link之檔案不會有任何的影響,其檔案仍能夠存取,相關的結果如下所示:
[rockylinux@workstation ~]$ rm file1
[rockylinux@workstation ~]$ cat file2_hard
test
123
[rockylinux@workstation ~]$ cat file2_soft
cat: file2_soft: No such file or directory
開啟workstation之虛擬主機,並以rockylinux
之使用者登入,密碼為:rocky,依序完成下列的操作:
ls
指令來查看當前使用者目錄底下所有檔案屬性等資訊directory1/sub_directory
,請以一行指令完成test_file1
test_file1
使用指令建立一個soft link,soft link名稱為:test_file1_soft
directory1
刪除test_file1
刪除並使用ls
指令觀察test_file1_soft
之狀態test_file1_soft
刪除